4D Chart v13

配列を使ってグラフを作成する (例題)

ホーム

 
4D Chart v13
配列を使ってグラフを作成する (例題)

配列を使ってグラフを作成する (例題)  


 

 

以下の2節ではCT Chart arrays関数を使用して、2次元グラフと3次元グラフを作成する例を示します。

データベースのレコードを使用してグラフの作成をプログラムしたい場合はデータベース内のレコードを使ってグラフを作成する (例題)を参照してください。

各項目では以下について説明します:

  • 例に使用される状況の説明
  • サンプルデータベースのストラクチャ
  • サンプルデータを使用して、すべてメソッドで作成されたグラフ
  • サンプルグラフの作成に使用されたコード

部品を製造する企業のエンジニアリング部門の新しいマネージャになったとします。あなたの新しい業務の1つとして、ご自分が管理する部署が顧客からの支援要求に応答するときの時間を短縮することがあります。

よって、各部署の応答時間を追跡するためにデータベースを設計することにしました。データベースの構造は以下の通りです:

収集した情報を解析するために、去年の各月について、各部署の平均応答時間 (完了日 - 要求日 / 要求数) をグラフ化することにしました。4D Chartを使用して、以下のグラフを生成します:

このグラフはGR RESPONSEメソッドで生成、フォーマットされます。このメソッドは配列にデータを入れ、その配列からグラフを生成してから、軸タイトルや系列のカラーなどのグラフの特定の外観をカスタマイズします。

メソッドの最初の部分は4Dコマンドと関数を使用して配列の作成とデータの指定を行っています。項目配列の内容はコードで指定され、系列配列の内容はデータベースから直接取り込まれ、数値配列はデータ操作の結果です。数値配列のサイズは項目配列のサイズを系列配列のサイズで乗算したものと同じです。

このメソッドは、レコードの選択を操作するためにセットを使用します。セットを作成した後は、必要とされるレコードの選択を検索によって変更し、何度でもレコードのオリジナルセットに戻すことができます。このメソッドでは、セットはグラフ全体のレコードの選択に使用されます。各月の各部署のレコードの検索の結果行われる選択で値が決まるので、選択は数値配列へのデータの指定中に変更されます。配列にデータが指定された後、4D Chartコマンドがグラフの作成とその機能の変更のために使用されます。

配列にデータが指定された後、4D Chartコマンドがグラフの作成とその機能の変更のために使用されます。

以下がGR RESPONSメソッドです :

 &NBSP`メソッド: GRAPH RESPONSE
  `項目: 月
  `系列: 部門名
  `値: 作業期間の平均(日単位)
 
 C_LONGINT($x;$y;$z;$Counter)
 C_LONGINT($Left;$Top;$Right;$Bottom)
 C_LONGINT($Left2;$Top2;$Right2;$Bottom2)
 C_LONGINT($Area;$Chart;$Title;$Locate;$Duration;$Color;$Font)
 
 &NBSP`項目配列を定義し、値を入れる
 ARRAY STRING(3;$aCategories;12)
 $aCategories{1}:="Jan"
 $aCategories{2}:="Feb"
 $aCategories{3}:="Mar"
 $aCategories{4}:="Apr"
 $aCategories{5}:="May"
 $aCategories{6}:="Jun"
 $aCategories{7}:="Jul"
 $aCategories{8}:="Aug"
 $aCategories{9}:="Sep"
 $aCategories{10}:="Oct"
 $aCategories{11}:="Nov"
 $aCategories{12}:="Dec"
 
 &NBSP`チャート用のレコードセレクションを生成する
  `後で使用するためにレコードをセットに格納する
 QUERY BY FORMULA([Response Time];Year of([Response Time]Request Date)=1993)
 CREATE SET([Response Time];"sChartData")
 
 &NBSP`系列配列を部門名で定義し、データを入れる
 ARRAY STRING(20;$aSeries;0)
 DISTINCT VALUES([Response Time]Department;$aSeries)
 
 &NBSP`数値の数でチャートを判断する
  `(数値の数=項目の数*系列の数)
  `数値配列を設定する
 ARRAY REAL($aValues;12*Size of array($aSeries))
 
 &NBSP`数値配列にデータを入れる
  `各部門で、月ごとの平均作業期間を検出する
 $Counter:=0 `カウンタは数値の数を追跡する
 For($x;1;Size of array($aSeries)) `部門の数だけループする
    For($y;1;12) `12ヵ月分ループする
       $Counter:=$Counter+1
       QUERY SELECTION([Response Time];[Response Time]Department=$aSeries{$x})
       QUERY SELECTION BY FORMULA([Response Time];Month of([Response Time]Request Date)=$y)
       If(Records in selection([Response Time])>0)
          $Duration:=0 `期間をインクリメントするカウンタ
          For($z;1;Records in selection([Response Time]))
             GOTO SELECTED RECORD([Response Time];$z)
             $Duration:=$Duration+([Response Time]Completion Date-[Response Time]Request Date)
          End for
          $aValues{$Counter}:=$Duration/Records in selection([Response Time])
       End if
       USE SET("sChartData") `レコードの元のセレクションを復元する
    End for
 End for
 
 &NBSP`インターフェース要素を隠す
 CT SET DISPLAY(Area;1;0) `メニューを隠す
 CT SET DISPLAY(Area;2;0) `チャートツールを隠す
 CT SET DISPLAY(Area;3;0) `オブジェクトツールを隠す
 CT SET DISPLAY(Area;6;0) `スクロールバーを隠す
 CT SET DISPLAY(Area;9;0) `ルーラーを隠す
 
 &NBSP`棒グラフを作成する
 $Chart:=CT Chart arrays(Area;2;1;$aCategories;$aSeries;$aValues)
 
 &NBSP`項目軸と数値軸のタイトルを追加する
 CT SET TITLE ATTRIBUTES(Area;$Chart;2;2;3;"Response Time in Days")
 CT SET TITLE ATTRIBUTES(Area;$Chart;0;3;0;"Month Request Was Received")
 
 &NBSP`系列のカラーを設定する(緑、黄色、青)
 CT SET CHART FILL ATTRIBUTES(Area;$Chart;8;100;3;CT Index to color(10))
 CT SET CHART FILL ATTRIBUTES(Area;$Chart;8;200;3;CT Index to color(2))
 CT SET CHART FILL ATTRIBUTES(Area;$Chart;8;300;3;CT Index to color(7))
 
 &NBSP`凡例位置を上部中央、横方向に設定する
 CT SET LEGEND ATTRIBUTES(Area;$Chart;1;0;0;0;7;0;0)
 
 &NBSP`チャートタイトルを左上隅に追加する
 $Title:=CT Draw text(Area;1;1;300;3;"Average Response Time Per Department")
 
 &NBSP`チャートタイトルをフォーマット (Palatino, 14 point, Bold, Center, Black)
 $Color:=CT Index to color(16)
 $Font:=CT Font number("Palatino")
 CT SET TEXT ATTRIBUTES(Area;$Title;$Font;14;1;$Color;1)
 
 &NBSP`中央揃えするためにチャートエリアの寸法を検出する
 CT GET AREA BOUNDARY(Area;1;$Left;$Top;$Right;$Bottom)
 
 &NBSP`チャートのウインドウサイズを50ポイント小さく再定義する
 CT SIZE(Area;$Chart;$Right-50;$Bottom-50)
 
 &NBSP`チャートを中央揃えする
 CT GET BOUNDARY(Area;$Chart;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Right-$Left)-($Right2-$Left2))/2
 CT MOVE(Area;$Chart;$Locate;$Top2)
 
 &NBSP`チャートタイトルを中央揃えする
 CT GET BOUNDARY(Area;$Title;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Right-$Left)-($Right2-$Left2))/2
 CT MOVE(Area;$Title;$Locate;$Top2)
 
  `チャートを10ポイント下げる
 CT GET BOUNDARY(Area;$Chart;$Left;$Top;$Right;$Bottom)
 CT MOVE(Area;$Chart;$Left;$Top+10)
 
 &NBSP`すべのオブジェクトの選択を解除する
 CT SELECT(Area;-1;0)

例えば、教育プログラムの西日本地区担当者であり、該当地区の生徒達のテストスコアが向上したかどうかを判断したいと仮定します。データベースには、テスト日付と出身地にタグが付いて、該当地区の生徒のスコアが保存されています。

Note: これはデータベース内のレコードを使ってグラフを作成する (例題)レコードのデータによって定義された系列を使って2次元グラフを作成するで使用されたデータと同じです。

毎年複数のテスト日があるので、データベースから直接データをグラフ化することはできません。その代わりに、データを配列に入れるメソッドを作成し、各年を "項目"、各県を "系列" として使用することができます。

前述のグラフはGRAPH SCORES 3Dメソッドを使用して生成されています。このメソッドは配列にデータを入れ、配列からグラフを生成した後、グラフの特定の外観をカスタマイズします。

項目配列の内容はコードに直接指定されます。系列配列の内容はデータベースから取られます。数値配列の内容は年ごとの各都道府県のテストスコアの平均です。数値配列のサイズは項目配列のサイズを系列配列のサイズで乗算したものと同じです。

4D Chartコマンドを使用すると、4D Chartメニューバー、スクロールバー、ルーラ、ツールパレットは隠されます。4D Chartエリアは入力不可に設定され、ユーザはそのエリアのオブジェクトを選択したり、それに対する変更をまったく行えなくなります。

以下はGRAPH SCORES 3Dメソッドのコードです:

  `メソッド: GRAPH SCORES 3D
  `項目: 調査年
  `系列: メンバーの県
  `値: テストスコア
 
 C_LONGINT($x;$y;$z;$Counter)
 C_LONGINT($Left;$Top;$Right;$Bottom)
 C_LONGINT($Left2;$Top2;$Right2;$Bottom2)
 C_LONGINT($Area;$Chart;$Title;$Locate;$Score;$Color;$Font;$Rect)
 
 &NBSP`項目配列を定義し、データを指定する
 ARRAY STRING(4;$aCategories;2)
 $aCategories{1}:="1992"
 $aCategories{2}:="1993"
 
 &NBSP`数値配列を設定する
 ALL RECORDS([Test Scores])
 ARRAY STRING(2;$aSeries;0)
 DISTINCT VALUES([Test Scores]State;$aSeries)
 
 &NBSP`値配列の次元
  `(グラフへの数値の数=項目*系列)
 ARRAY REAL($aValues;2*Size of array($aSeries))
 
 &NBSP`値配列を作成する
  `各県ごとに平均を算出する
 $Counter:=0 `カウンタは数値を追跡する
 For($x;1;Size of array($aSeries)) `県の数だけループする
    For($y;1;2) `2年間だけループする
       $Counter:=$Counter+1
       QUERY([Test Scores];[Test Scores]State=$aSeries{$x})
       QUERY SELECTION BY FORMULA([Test Scores];
       String(Year of([Test Scores]Test Date))=$aCategories{$y})
       If(Records in selection([Test Scores])>0)
          $Score:=0 `スコアの合計を保持する
          For($z;1;Records in selection([Test Scores]))
             GOTO SELECTED RECORD([Test Scores];$z)
             $Score:=$Score+[Test Scores]Score
          End for
  `スコアの平均を出す
          $aValues{$Counter}:=$Score/Records in selection([Test Scores])
       End if
    End for
 End for
 
 &NBSP`セレクションを復元
 ALL RECORDS([Test Scores])
 
 &NBSP`インタフェース要素を隠す
 CT SET DISPLAY(Area;1;0) `メニューバーを隠す
 CT SET DISPLAY(Area;2;0) `チャートツールを隠す
 CT SET DISPLAY(Area;3;0) `オブジェクトツールを隠す
 CT SET DISPLAY(Area;6;0) `スクロールバーを隠す
 CT SET DISPLAY(Area;9;0) `ルーラを隠す
 
 &NBSP`3D 棒グラフを作成する
 $Chart:=CT Chart arrays(Area;100;1;$aCategories;$aSeries;$aValues)
 
 &NBSP`軸タイトルを表示または隠す
 CT SET TITLE ATTRIBUTES(Area;$Chart;0;3;0;"Year Tested")
 CT SET TITLE ATTRIBUTES(Area;$Chart;1;1;0;"State") `Hide title
 CT SET TITLE ATTRIBUTES(Area;$Chart;2;2;3;"Average Score (in Points)")
 
 &NBSP`凡例位置を上部中央、横方向に設定する
 CT SET LEGEND ATTRIBUTES(Area;$Chart;1;0;0;0;7;0;0)
 
 &NBSP`チャートタイトルを左上隅に追加する
 $Title:=CT Draw text(Area;1;1;350;3;"Member State Test Scores")
 
 &NBSP`チャートタイトルをフォーマット (Geneva, 14 point, Bold, Center, Blue)
 $Color:=CT Index to color(7)
 $Font:=CT Font number("Geneva")
 CT SET TEXT ATTRIBUTES(Area;$Title;$Font;14;1;$Color;1)
 
 &NBSP`中央揃えのためにウインドウの寸法を取得する
 CT GET AREA BOUNDARY(Area;1;$Left;$Top;$Right;$Bottom)
 
 &NBSP`チャートをウインドウサイズから50ポイント小さく変更する
 CT SIZE(Area;$Chart;$Right-50;$Bottom-50)
 
 &NBSP`チャートを横方向に中央揃えする
 CT GET BOUNDARY(Area;$Chart;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Right-$Left)-($Right2-$Left2))/2
 CT MOVE(Area;$Chart;$Locate;$Top2)
 
 &NBSP`タイトルを横方向に中央揃えする
 CT GET BOUNDARY(Area;$Title;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Right-$Left)-($Right2-$Left2))/2
 CT MOVE(Area;$Title;$Locate;$Top2)
 
 &NBSP`チャートをタイトルから10ポイント分下げる
 CT GET BOUNDARY(Area;$Chart;$Left;$Top;$Right;$Bottom)
 CT MOVE(Area;$Chart;$Left;$Top+10)
 
 &NBSP`チャートとタイトルに灰色の矩形で枠組みをする
 $Rect:=CT Draw rectangle(Area;$Left-2;$Top2-2;$Right+2;$Bottom+2+10;0)
 CT SET FILL ATTRIBUTES(Area;$Rect;3;CT Index to color(13))
 
 &NBSP`すべのオブジェクトを縦方向に中央揃えする
 CT GET AREA BOUNDARY(Area;1;$Left;$Top;$Right;$Bottom)
 CT GET BOUNDARY(Area;-1;$Left2;$Top2;$Right2;$Bottom2)
 $Locate:=(($Bottom-$Top)-($Bottom2-$Top2))/2
 CT MOVE(Area;-1;$Left2;$Locate)
 
 &NBSP`矩形を背面にする
 CT SELECT(Area;-1;0) `すべての選択を解除する
 CT SELECT(Area;$Rect;1) `矩形を選択する
 CT DO COMMAND(Area;24002) `背面にする
 CT SELECT(Area;-1;0) `すべの選択を解除する
 
 &NBSP`すべのオブジェクトの選択を解除する
 CT SELECT(Area;-1;0)

 
プロパティ 

プロダクト: 4D Chart
テーマ: ランゲージの概要

 
参照 

データベース内のレコードを使ってグラフを作成する (例題)